home *** CD-ROM | disk | FTP | other *** search
- /*
- File: GXEditNewRun.c
-
- Contains:
-
- Written by: Barton R. House
-
- Copyright: © 1993 by Apple Computer, Inc., All rights reserved.
-
- */
-
- #include "GXEdit.h"
- #include "GXEditDebug.h"
- #include "GXEditDoc.h"
- #include "GXEditNewRun.h"
- #include "GXEditStyle.h"
- #include "GXEditError.h"
-
- #include "graphics routines.h"
- #include "graphics libraries.h"
- #include "font routines.h"
- #include "math routines.h"
- #include "layout routines.h"
-
-
- static void CalcNewRunStarts(NewRunPtr rp, short runOffset);
-
- void InsertNewRunText(DocPtr dp, NewRunPtr rp, short runOffset, void * text, short numText)
- {
-
- if(runOffset < 0 || runOffset > rp->numText)
- gxEditPostError(dp, gx_edit_internal_fatal_error);
-
- rp->numText += numText;
-
- /* resize the data structures */
-
- SetHandleSize((Handle) rp->text, rp->numText);
-
- /* shift the text data */
-
- BlockMove((Ptr) ((long) *rp->text + (runOffset)),
- (Ptr) ((long) *rp->text + ((runOffset + numText))),
- (rp->numText - runOffset - numText));
-
- /* copy the new text data */
-
- BlockMove((Ptr) text, (Ptr) ((long) *rp->text + (runOffset)), numText);
-
- }
-
- void SplitNewRun(DocPtr dp, NewRunPtr rp, short runOffset, NewRunPtr newRun)
- {
- long size;
-
- if(runOffset < 0 || runOffset > rp->numText)
- gxEditPostError(dp, gx_edit_internal_fatal_error);
-
- /* initialize the new run */
-
- newRun->styleIndex = rp->styleIndex;
-
- IncrementDocStyleRefCount(dp, rp->styleIndex);
-
- newRun->paraOffset = rp->paraOffset + runOffset;
- newRun->numText = rp->numText - runOffset;
-
- /* adjust the old gxLine */
-
- rp->numText = runOffset;
-
- /* create and copy over the text */
-
- size = newRun->numText;
- newRun->text = (void **) NewHandle(size);
-
- BlockMove((Ptr) ((long) *rp->text + (runOffset)), (Ptr) *newRun->text, size);
-
- /* adjust the size of the text */
-
- size = rp->numText;
- SetHandleSize((Handle) rp->text, size);
-
- }
-
- /* join the two runs, freeing up the right run */
-
- void JoinNewRuns(DocPtr dp, NewRunPtr left, NewRunPtr right)
- {
- short runOffset;
-
- if(left->styleIndex != right->styleIndex)
- gxEditPostError(dp, gx_edit_internal_fatal_error);
-
- runOffset = left->numText;
-
- left->numText += right->numText;
-
- /* grow the data structures */
-
- SetHandleSize((Handle) left->text, left->numText);
-
- /* copy over the glyph information */
-
- BlockMove((Ptr) *right->text, (Ptr) ((long) *left->text + (runOffset)),
- right->numText);
-
- /* dispose of the right side data structures */
-
- DisposeNewRun(dp, right);
-
- }
-
- void NewNewRun(DocPtr dp, NewRunPtr rp, short styleIndex)
- {
- rp->styleIndex = styleIndex;
-
- IncrementDocStyleRefCount(dp, styleIndex);
-
- rp->paraOffset = 0;
- rp->numText = 0;
- rp->text = (void **) NewHandle(0);
-
- }
-
- void NewRunClear(DocPtr dp, NewRunPtr rp, short runOffset, short numText)
- {
- long size;
-
- if(numText == 0)
- return;
-
- if(runOffset < 0 || runOffset > rp->numText)
- gxEditPostError(dp, gx_edit_internal_fatal_error);
-
- if(runOffset + numText > rp->numText)
- gxEditPostError(dp, gx_edit_internal_fatal_error);
-
- size = (rp->numText - runOffset - numText);
- BlockMove((Ptr)((long) *rp->text + ((runOffset + numText))),
- (Ptr)((long) *rp->text + (runOffset)), size);
-
- rp->numText -= numText;
-
- size = rp->numText;
- SetHandleSize((Handle) rp->text, size);
-
- }
-
- void DisposeNewRun(DocPtr dp, NewRunPtr rp)
- {
- DisposeHandle((Handle) rp->text);
-
- DecrementDocStyleRefCount(dp, rp->styleIndex);
- }
-
- void SetNewRunTextFont(DocPtr dp, NewRunPtr rp, gxFont fontId)
- {
- void * runFont;
-
- runFont = (void *) GetDocStyleTextFont(dp, rp->styleIndex);
-
- if(runFont == fontId) {
- gxEditPostError(dp, gx_edit_internal_fatal_error);
- return;
- }
-
- DecrementDocStyleRefCount(dp, rp->styleIndex);
-
- rp->styleIndex = SetDocStyleTextFont(dp, rp->styleIndex, fontId);
-
- IncrementDocStyleRefCount(dp, rp->styleIndex);
-
- }
-
- void SetNewRunTextSize(DocPtr dp, NewRunPtr rp, short textSize)
- {
- short runSize;
-
- runSize = GetDocStyleTextSize(dp, rp->styleIndex);
-
- if(runSize == textSize) {
- gxEditPostError(dp, gx_edit_internal_fatal_error);
- return;
- }
-
- DecrementDocStyleRefCount(dp, rp->styleIndex);
-
- rp->styleIndex = SetDocStyleTextSize(dp, rp->styleIndex, textSize);
-
- IncrementDocStyleRefCount(dp, rp->styleIndex);
-
- }
-